#include "mcu_gpio.h"



typedef struct _gpio_init_param_t
{
    GPIO_TypeDef * GPIOx;
    uint16_t Pin;       /*!< Specifies the GPIO pins to be configured.
                           This parameter can be any value of @ref GPIO_pins */
    uint8_t Pull;      /*!< Specifies the Pull-up or Pull-Down activation for the selected pins.
                           This parameter can be a value of @ref GPIO_pull */
    uint8_t Speed;     /*!< Specifies the speed for the selected pins.
                           This parameter can be a value of @ref GPIO_speed */
    uint32_t Mode;      /*!< Specifies the operating mode for the selected pins.
                           This parameter can be a value of @ref GPIO_mode */
    uint32_t Alternate;  /*!< Peripheral to be connected to the selected pins 
                            This parameter can be a value of @ref GPIOEx_Alternate_function_selection */
}gpio_init_param_t;

void Gpio_InitOdr(void);

static const gpio_init_param_t gpio_init_list[] = _GPIO_INIT_LIST;

void Gpio_Init()
{
    int i;
    GPIO_InitTypeDef GPIO_InitStruct;

    Gpio_InitOdr();
    for(i=0; i<sizeof(gpio_init_list)/sizeof(gpio_init_param_t); i++)
    {
        GPIO_InitStruct.Pin = gpio_init_list[i].Pin;
        GPIO_InitStruct.Mode = gpio_init_list[i].Mode;
        GPIO_InitStruct.Pull = gpio_init_list[i].Pull;
        GPIO_InitStruct.Speed = gpio_init_list[i].Speed;
        GPIO_InitStruct.Alternate = gpio_init_list[i].Alternate;
        HAL_GPIO_Init(gpio_init_list[i].GPIOx, &GPIO_InitStruct);
    }
}

